/**
 * 将驼峰命名转换为下划线命名
 * @param {string} str 驼峰命名的字符串
 * @returns {string} 下划线命名的字符串
 */
export function camelToSnake(str: string): string {
  return str.replace(/([A-Z])/g, '_$1').toLowerCase()
}

/**
 * 将对象的键名从驼峰命名转换为下划线命名
 * @param {Object} obj 要转换的对象
 * @returns {Object} 转换后的新对象
 */
export function convertKeysToSnakeCase(obj: any): any {
  if (!obj || typeof obj !== 'object') return obj
  
  if (Array.isArray(obj)) {
    return obj.map(item => convertKeysToSnakeCase(item))
  }
  
  const result: Record<string, any> = {}
  for (const [key, value] of Object.entries(obj)) {
    const newKey = camelToSnake(key)
    
    // 递归处理嵌套对象和数组
    if (value && typeof value === 'object') {
      result[newKey] = convertKeysToSnakeCase(value)
    } else {
      result[newKey] = value
    }
  }
  
  return result
}